/*
典型 svr_util libevent_cpp 基础的app管理 写法
最新代码以项目 https://gitee.com/yiliangwu880/GameSvr.git 为准。

*/
#pragma once
#include "singleton.h"
#include "include_all.h"
#include "log_def.h"

static const uint16_t BASE_COM_PORT = 30000;//进程间通讯用的端口 + 进程名字哈希码。 （ ./excute ....  命令）

class ConToCmdClient : public lc::SvrCon
{
private:
	virtual void OnRecv(const lc::MsgPack& msg) override;
	virtual void OnConnected() override {}
};

class BaseAppMgr 
{
	lc::Listener<ConToCmdClient> m_svr;
	uint16_t m_com_port = 0;
public:
	//shell启动命令例子： 
	//./excute   #启动进程
	//./excute d #后台启动进程
	//./excute stop  #停止进程
	//./excute ....  #其他用户自定义命令
	//@argc
	//@argv main 函数参数。
	void Start(int argc, char* argv[], const std::string &app_name);
	void Exit();//请求退出进程，不会马上生效。等异步定时回调
	void startCmd(int argc, char* argv[]);
public:
	virtual bool OnStart() = 0;
	//子类需要延时 退出，继承这个函数，等可以退出时 调用 EventMgr::Ins().StopDispatch(); 就能马上退出
	virtual void OnExit(); 

private:
	void OnTimer();

};